package com.example.gradu.graduationproject.util;

import lombok.Data;

import java.io.Serializable;

/**
 * 统一返回对象R
 *
 * @author makejava
 * @since 2025-02-12 21:55:04
 */
@Data
public class R<T> implements Serializable {  // 使用泛型 <T> 表示 data 的类型
    private static final long serialVersionUID = -19454746371722567L;
    private int code;
    private String message;
    private T data;  // 使用泛型 T 代替 Object 类型

    /**
     * 设置数据
     *
     * @param data 数据
     * @return R
     */
    public R<T> setData(T data) {  // 设置数据时明确指定类型
        this.data = data;
        return this;
    }

    /**
     * 操作成功
     *
     * @return R
     */
    public static <T> R<T> ok() {  // 使方法支持泛型
        R<T> r = new R<>();
        r.code = 200;
        r.message = "OK";
        return r;
    }

    /**
     * 认证授权失败。 包括密钥信息不正确；数字签名错误；授权已超时
     *
     * @return R
     */
    public static <T> R<T> fail() {
        R<T> r = new R<>();
        r.code = 401;
        r.message = "fail";
        return r;
    }

    /**
     * 系统异常
     *
     * @return R
     */
    public static <T> R<T> exp() {
        R<T> r = new R<>();
        r.code = 500;
        r.message = "exception";
        return r;
    }
}